package com.wjjzst.common.utils;

import java.text.SimpleDateFormat;
import java.time.DayOfWeek;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.temporal.TemporalAdjusters;
import java.util.Date;

/**
 * @Author: Wjj
 * @Date: 2021/6/3 11:26 上午
 * @desc:
 */
public class WjjDateUtils {
    public static final String YEAR_MONTH_NUMBER = "yyyyMM";

    public static String date2Str(Date date, String format) {
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        return sdf.format(date);
    }

    // TemporalAdjusters
    // 方法	描述
    // dayOfWeekInMonth 	返回同一个月中每周的第几天
    // firstDayOfMonth 	返回当月的第一天
    // firstDayOfNextMonth 	返回下月的第一天
    // firstDayOfNextYear 	返回下一年的第一天
    // firstDayOfYear 	返回本年的第一天
    // firstInMonth 	返回同一个月中第一个星期几
    // lastDayOfMonth 	返回当月的最后一天
    // lastDayOfNextMonth 	返回下月的最后一天
    // lastDayOfNextYear 	返回下一年的最后一天
    // lastDayOfYear 	返回本年的最后一天
    // lastInMonth 	返回同一个月中最后一个星期几
    // next / previous 	返回后一个/前一个给定的星期几
    // nextOrSame / previousOrSame 	返回后一个/前一个给定的星期几，如果这个值满足条件，直接返回
    public static void main(String[] args) {
        LocalDateTime now = LocalDateTime.now();
        System.out.println("当前时间：" + now + "======>" + now.getDayOfWeek());
        System.out.println("下一个周一：" + now.with(TemporalAdjusters.next(DayOfWeek.MONDAY)));
        System.out.println("上一个周一：" + now.with(TemporalAdjusters.previous(DayOfWeek.MONDAY)));
        System.out.println("下一个周五：" + now.with(TemporalAdjusters.nextOrSame(DayOfWeek.FRIDAY)));
        System.out.println("上一个周五：" + now.with(TemporalAdjusters.previousOrSame(DayOfWeek.FRIDAY)));
        System.out.println("本月最后一个周五：" + now.with(TemporalAdjusters.lastInMonth(DayOfWeek.FRIDAY)));
        System.out.println("本月第一个周五：" + now.with(TemporalAdjusters.firstInMonth(DayOfWeek.FRIDAY)));
        System.out.println("本月第一天：" + now.with(TemporalAdjusters.firstDayOfMonth()));
        System.out.println("本月最后一天：" + now.with(TemporalAdjusters.lastDayOfMonth()));
        System.out.println("下月的第一天：" + now.with(TemporalAdjusters.firstDayOfNextMonth()));
        System.out.println("今年的第一天：" + now.with(TemporalAdjusters.firstDayOfYear()));
        System.out.println("今年的最后一天：" + now.with(TemporalAdjusters.lastDayOfYear()));
        System.out.println("下一年的第一天：" + now.with(TemporalAdjusters.firstDayOfNextYear()));
        System.out.println("本月的第二个周五：" + now.with(TemporalAdjusters.dayOfWeekInMonth(2, DayOfWeek.FRIDAY)));
        System.out.println("两周后：" + now.with(TemporalAdjusters.ofDateAdjuster(date -> date.plusWeeks(2))));
        System.out.println("下一年最后一天：" + now.plusYears(1).with(LocalTime.MAX).with(TemporalAdjusters.lastDayOfYear()));
        // 当前时间：2022-02-11T14:38:35.429======>FRIDAY
        // 下一个周一：2022-02-14T14:38:35.429
        // 上一个周一：2022-02-07T14:38:35.429
        // 下一个周五：2022-02-11T14:38:35.429
        // 上一个周五：2022-02-11T14:38:35.429
        // 本月最后一个周五：2022-02-25T14:38:35.429
        // 本月第一个周五：2022-02-04T14:38:35.429
        // 本月第一天：2022-02-01T14:38:35.429
        // 本月最后一天：2022-02-28T14:38:35.429
        // 下月的第一天：2022-03-01T14:38:35.429
        // 今年的第一天：2022-01-01T14:38:35.429
        // 今年的最后一天：2022-12-31T14:38:35.429
        // 下一年的第一天：2023-01-01T14:38:35.429
        // 本月的第二个周五：2022-02-11T14:38:35.429
        // 两周后：2022-02-25T14:38:35.429
    }
}
